home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
embedded
/
m68k
/
tutor.arc
/
DCODE68K.SA
< prev
next >
Wrap
Text File
|
1990-01-05
|
49KB
|
1,479 lines
TTL DCODE68K DISASSEMBLER
DCODE68K IDNT 1,4 68K ONE LINE DISASSEMBLER 07/28/82
XREF PNT4HX,PNT6HX,PNT8HX
XREF FRELADDR
XREF HEX2DEC
SPC 1
XDEF DCODE68K
BUFSIZE SET 80 SIZE OF OUTPUT BUFFER
EOT SET 4
SPC 1
* CALLING SEQUENCE:
* D0,D1,D2 = CODE TO BE DISASSEMBLED
* A4 = VALUE OF PROGRAM COUNTER FOR THE CODE
* A5 = POINTER TO STORE DATA (BUFSIZE = 80 ASSUMED)
* JSR DCODE68K
SPC 1
* RETURN:
* A4 = VALUE OF PROGRAM COUNTER FOR NEXT INSTRUCTION
* A5 = POINTER TO LINE AS DISASSEMBLED
* A6 = POINTER TO END OF LINE
*
* 01234567890123456789012345678901234567890123456789
* AAAAAA FDATA.DDDDDDDDDDDDDD FOC.... FOP.....
SPC 1
FDATA EQU 10 DATA FIELD
FOC EQU 31 OP-CODE FIELD
FOP EQU 39 OPERAND FIELD
SPC 1
* CAUSES ORGIN MODULO 4
LONG MACRO
DS 0
DS.B (*-X)&2
ENDM
SPC 3
LOCVARSZ EQU 16
OFFSET -LOCVARSZ
DATA DS.L 3
HISPC DS.L 1
SECTION 11
PAGE
X DS 0 BASE ADDRESS THIS MODULE
LONG
* MOVEM REGISTERS TO EA
*
* 01001D001S......
* ..........XXXXXX EFFECTIVE ADDRESS
* .........0...... WORD
* .........1...... LONG
* .....0.......... REGISTER TO MEMORY
* .....1.......... MEMORY TO REGISTER
*
IMOVEMFR DS 0
BSR MOVEMS SIZE
MOVE.L #$0038,D6 . 1,4
AND.W (A4),D6 . 1,4
CMP.W #$0020,D6
BEQ.S IM7788 PREDECREMENT MODE
MOVE.L #1,D6 D6 = INCREMENTER (BIT POSITION)
MOVE.L #0,D1 D1 = BIT POSITION
BRA.S IM7799
IM7788 MOVE.L #-1,D6 D6 = DECREMENTER (BIT POSITION)
MOVE.L #15,D1 D1 = BIT POSITION
IM7799 BSR MOVEMR BUILD MASK WORD
SPC 1
MOVE.B #',',(A6)+ STORE COMMA
SPC 1
ADD.L #2,D3
MOVE.W (A4),D4
MOVE.W #$1F4,D7 CONTROL + PREDECREMENT
BSR EA
BRA.S CS16 COMMON
SPC 1
LONG
* MOVEM EA TO REGISTERS
*
IMOVEMTR BSR MOVEMS SIZE
ADD.L #2,D3
MOVE.W #$7EC,D7 CONTROL + POSTINCREMENT
BSR EA
SPC 1
MOVE.B #',',(A6)+ STORE COMMA
SPC 1
MOVE.L #1,D6 D6 = BIT POSITION INCREMENTER
MOVE.L #0,D1 D1 = BIT POSITION
BSR MOVEMR
SPC 1
CS16 BRA.S CS15 COMMON
SPC 1
PAGE
LONG
ISTOP DS 0
MOVE.W 2(A4),D0
MOVE.B #'#',(A6)+ IMMEDIATE
MOVE.B #'$',(A6)+ HEX
BSR PNT4HX VALUE
BRA COMMON4
PAGE
LONG
IMMED DS 0 ADD AND CMP # EOR OR SUB
BSR FORMSIZE
ADD.L #2,D3 SIZE = 4
MOVE.B #'#',(A6)+ IMMEDIATE
SPC 1
CLR.L D0
MOVE.W 2(A4),D0 D0 = EXTENSION WORD
MOVE.W (A4),D1
LSR.W #6,D1
AND.W #3,D1
BEQ.S IMMED65 .BYTE
SPC 1
CMP.B #1,D1
BEQ.S IMMED75 .WORD
SPC 1
ADD.L #2,D3 .LONG SIZE = 6
MOVE.L 2(A4),D0 D0 = LONG EXTENSION WORD
SPC 1
IMMED45 BSR HEX2DEC DECIMAL
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
MOVE (A4),D0
AND.W #$003F,D0
CMP.W #$003C,D0 DESTINATION ADDRESS MODE 111100 "SR"
BNE.S IMMED55 NOT FOUND
MOVE.W (A4),D0 "SR" ILLEGAL FOR
AND.W #$4000,D0 ADDI SUBI CMPI
BNE FERROR 0600 0400 0C00
MOVE.W (A4),D1
AND.W #$00C0,D1
CMP.W #$0080,D1
BEQ FERROR .LONG NOT ALLOWED
MOVE.B #'S',(A6)+ #,SR FOR ANDI, EORI, ORI
MOVE.B #'R',(A6)+
CS15 BRA.S CS14 COMMON
SPC 1
IMMED55 BSR EA
BRA.S CS14 COMMON
IMMED65 MOVE.L D0,D1 D1 = XXXXXXXX........
LSR.W #8,D1 D1 = 00000000XXXXXXXX
BEQ.S IMMED75
MOVE.L D0,D1
ASR.W #7,D1
ADD.W #1,D1 CHECK FOR NEGATIVE
BNE FERROR
IMMED75 EXT.L D0
BRA IMMED45
PAGE
* BIT 5432109876543210
* ....RRRMMM...... DESTINATION REGISTER MODE
* ..........MMMRRR SOURCE MODE REGISTER
* 0001............ .BYTE
* 0011............ .WORD
* 0010............ .LONG
*
* IF BYTE SIZE; DESTINATION ADDRESS DIRECT NOT ALLOWED
LONG
IMOVE DS 0
BRA IMOVEA1
SPC 2
LONG
ILINK DS 0
BSR.S FORMREGA
SPC 1
MOVE.B D5,(A6)+ COMMA SERARATOR
SPC 1
MOVE.B #'#',(A6)+
MOVE.W 2(A4),D0
EXT.L D0
BSR HEX2DEC DECIMAL DISPLACEMENT
BRA COMMON4
PAGE
LONG
FORM1 DS 0 CLR NEG NEGX NOT TST
BSR.L FORMSIZE
SPC 1
* NBCD TAS
FORM1A BSR EA DATA ALTERABLE ONLY
CS14 BRA.S CS13 COMMON
SPC 1
LONG
FORM3 DS 0 EXT SWAP
BSR.S FORMREGD
BRA.S CS13 COMMON
SPC 1
LONG
FORM4 DS 0 TRAP
MOVE.B #'#',(A6)+
MOVE.W (A4),D0
AND.L #$0F,D0
BSR HEX2DEC DECIMAL
BRA.S CS13 COMMON
SPC 1
LONG
FORM5 DS 0 UNLNK
BSR.S FORMREGA
BRA.S CS13 COMMON
PAGE
* 5432109876543210
* ....RRR......... ADDRESS REGISTER
* ..........XXXXXX EFFECTIVE ADDRESS
*
LONG
FORM6A DS 0 LEA
MOVE.W #$7E4,D7 CONTROL ADDRESSING
BSR.S EA10
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
ROL.W #7,D4
BSR.S FORMREGA
BRA.S CS13 COMMON
SPC 1
* BIT 5432109876543210
* ....DDD......... DATA REGISTER
* ..........XXXXXX EFFECTIVE ADDRESS
*
LONG
FORM6D DS 0 CHK DIVS DIVU MULS MULU
MOVE.W #$FFD,D7 DATA ADDRESSING
BSR.S EA10
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
ROL.W #7,D4
BSR.S FORMREGD
BRA.S CS13 COMMON
SPC 1
FORMREGA MOVE.B #'A',(A6)+ FORMAT A@
FORMREG5 AND.B #$07,D4
OR.B #'0',D4
MOVE.B D4,(A6)+
RTS
SPC 1
FORMREGD MOVE.B #'D',(A6)+ FORMAT D@
BRA FORMREG5
SPC 1
* BIT 5432109876543210
* ....DDD......DDD DATA REGISTERS
*
LONG
FORM7 DS 0 EXG
ROL.W #7,D4
BSR FORMREGD
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
BSR FORMREGD
BRA.S CS13 COMMON
SPC 1
* BIT 5432109876543210
* ....AAA......AAA ADDRESS REGISTERS
*
LONG
FORM8 DS 0 EXG
ROL.W #7,D4
BSR FORMREGA
SPC 1
FORM815 MOVE.B #',',(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
BSR FORMREGA
CS13 BRA CS12 COMMON
SPC 1
* BIT 5432109876543210
* ....DDD......... DATA REGISTER
* .............AAA ADDRESS REGISTER
*
LONG
FORM9 DS 0 EXG
ROL.W #7,D4
BSR FORMREGD DATA REGISTER
BRA FORM815
SPC 3
EA10 BRA EA
PAGE
* 5432109876543210
* ..........AAAAAA EFFECTIVE ADDRESS
* .......MMM...... OP-MODE
* ....RRR......... D-REGISTER
* .......011...... WORD EA,A@
* .......111...... LONG EA,A@
* .......000...... EA,D@ BYTE (ADDRESS REGISTER DIRECT NOT ALLOWED)
* .......0........ EA,D@
* .......1........ D@,EA
* ........00...... BYTE
* ........01...... WORD
* ........10...... LONG
*
LONG
* ADD <EA>,A@ CMP <EA>,A@ SUB <EA>,A@
FORM10EX DS 0 ADD CMP SUB
MOVE.W #$FFF,D7 ALL MODES ALLOWED
MOVE.L D4,D0
AND.W #$01C0,D0
BEQ.S FORM103 .......000......
CMP.W #$01C0,D0
BEQ.S FORM10E3 .......111......
CMP.W #$00C0,D0
BNE.S FORM10E6
MOVE.B #'.',(A5)+ .......011...... STORE PERIOD
MOVE.B #'W',(A5)+
BRA.S FORM10E4
SPC 1
FORM10E3 MOVE.B #'.',(A5)+
MOVE.B #'L',(A5)+
FORM10E4 BSR EA10
SPC 1
MOVE.B D5,(A6)+ STORE COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
ROL.W #7,D4
BSR FORMREGA <EA>,A@
BRA.S CS12 COMMON
FORM10E6 BTST.B #0,(A4)
BNE.S FORM105 .......1........ D@,<EA>
BRA.S FORM104 .......0........ <EA>,D@
PAGE
* 5432109876543210
* ..........AAAAAA EFFECTIVE ADDRESS
* .......MMM...... OP-MODE
* ....RRR......... D-REGISTER
* .......0........ EA,D@
* .......1........ D@,EA
* ........00...... BYTE
* ........01...... WORD
* ........10...... LONG
LONG
FORM10 DS 0 AND EOR OR
BTST.B #0,(A4)
BNE.S FORM105
SPC 1
FORM103 MOVE.W #$FFD,D7 DATA ADDRESSING
FORM104 BSR FORMSIZE
BSR EA10 <EA>,D@
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.B (A4),D4
LSR.B #1,D4
BSR FORMREGD
BRA.S CS12 COMMON
SPC 1
FORM105 BSR FORMSIZE D@,<EA>
MOVE.B (A4),D4
LSR.B #1,D4
BSR FORMREGD
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
MOVE.W (A4),D4
MOVE.W #$1FD,D7 ALTERABLE MEMORY ADDRESSING
BSR EA10
CS12 BRA COMMON
PAGE
LONG
* PEA (JMP JSR)
FORM11 MOVE.W #$7E4,D7 CONTROL ADDERSSING
BSR EA10
BRA CS12 COMMON
LONG
* JMP JSR
FORM11SL MOVE.L D4,D0 LOOK FOR .S OR .L 1,4
AND.W #$3F,D0 . 1,4
CMP.W #$38,D0 . 1,4
BNE.S FORM112 NOT .S 1,4
MOVE.B #'.',(A5)+ PERIOD 1,4
MOVE.B #'S',(A5)+ S 1,4
FORM112 CMP.W #$39,D0 . 1,4
BNE.S FORM114 . 1,4
MOVE.B #'.',(A5)+ PERIOD 1,4
MOVE.B #'L',(A5)+ L 1,4
FORM114 BRA FORM11 . 1,4
PAGE
* BIT 5432109876543210
* ....XXX.....0... DATA DESTINATION REGISTER
* ....XXX.....1... ADDRESS REGISTER
* ....XXX.00...... BYTE
* ........01...... WORD
* ........10...... LONG
* ............0... DATA REGISTER TO DATA REGISTER
* ............1... MEMORY TO MEMORY
* ............0XXX DATA SOURCE REGISTER
* ............1XXX ADDRESS SOURCE REGISTER
*
LONG
FORM12 DS 0 ABCD ADDX SBCD SUBX
BSR FORMSIZE
SPC 1
BTST #3,D4
BNE.S FORM125
SPC 1
BSR FORMREGD D@,D@; FORMAT SOURCE
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.B (A4),D4
LSR.B #1,D4
BSR FORMREGD FORMAT DESTINATION
BRA.S CS11 COMMON
SPC 1
FORM125 MOVE.B #'-',(A6)+ -
MOVE.B #'(',(A6)+ (
BSR FORMREGA A@ SOURCE
SPC 1
MOVE.L #'(-,)',D0 ),-(
BSR.S SCHR STORE CHARS
SPC 1
MOVE.B (A4),D4
LSR.B #1,D4
BSR FORMREGA A@ DESTINATION
MOVE.B #')',(A6)+
BRA.S CS11 COMMON
PAGE
* BIT 5432109876543210
* ....XXX.....1... ADDRESS REGISTER DESTINATION
* ....XXX.00...... BYTE
* ........01...... WORD
* ........10...... LONG
* ............1... MEMORY TO MEMORY
* ............1XXX ADDRESS SOURCE REGISTER
*
LONG
FORM12A DS 0 CMPM
BSR FORMSIZE
SPC 1
MOVE.B #'(',(A6)+ (
BSR FORMREGA A@
SPC 1
MOVE.L #'(,+)',D0 )+,(
BSR.S SCHR STORE CHARS
SPC 1
MOVE.B (A4),D4
LSR.B #1,D4
BSR FORMREGA A@
MOVE.B #')',(A6)+
MOVE.B #'+',(A6)+
CS11 BRA COMMON
PAGE
LONG
IQUICK BRA IQUICKA ADDQ SUBQ
SPC 4
* BIT 5432109876543210
* 0111...0........ FIXED
* ....RRR......... DATA REGISTER
* ........DDDDDDDD SIGN EXTENDED DATA
*
LONG
IMOVEQ DS 0
MOVE.B #'#',(A6)+ IMMEDIATE
SPC 1
MOVE.W (A4),D0
EXT.W D0
EXT.L D0
BSR HEX2DEC DECIMAL
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
ROL.W #7,D4
BSR FORMREGD
BRA CS11 COMMON
PAGE
SCHR MOVE.B D0,(A6)+ OUTPUT STRING
LSR.L #8,D0
BNE SCHR MORE TO OUTPUT
RTS
SPC 2
* MOVE FROM SR (STATUS REGISTER)
*
LONG
IMVFSR MOVE.L #',RS'>>8,D0 SR,
SPC 1
BSR SCHR
BSR EA DATA ALTERABLE
BRA CS11 COMMON
SPC 1
* MOVE FROM USP (USER STACK POINTER)
*
LONG
IMVFUSP MOVE.L #',PSU',D0 USP,
BSR SCHR
BSR FORMREGA
BRA CS11 COMMON
SPC 1
* MOVE TO SR (STATUS REGISTER)
*
LONG
IMVTSR MOVE.W #$FFD,D7 DATA ADDRESSING
BSR EA
MOVE.L #'RS,'>>8,D0 ,SR
IMVT44 BSR SCHR
BRA CS11 COMMON
SPC 1
* MOVE TO USP (USER STACK POINTER)
*
LONG
IMVTUSP BSR FORMREGA
MOVE.L #'PSU,',D0 ,USP
BRA IMVT44
SPC 1
* MOVE TO CCR (CONDITION CODE REGISTER)
*
LONG
IMVTCCR MOVE.W #$FFD,D7 DATA ADDRESSING
BSR EA
MOVE.L #'RCC,',D0 ,CCR
BRA IMVT44
PAGE
* BIT 5432109876543210
* 0000...1..001... FIXED
* ....XXX......... DATA REGISTER
* ........0....... MEMORY TO REGISTER
* ........1....... REGISTER TO MEMORY
* .........0...... WORD
* .........1...... LONG
* .............XXX ADDRESS REGISTER
*
LONG
IMOVEP DS 0
MOVE.B #'.',(A5)+ D@,#(A@)
MOVE.W #'LW',D0
BTST #6,D4
BEQ.S IMOVEP11 USE "W"
LSR.W #8,D0 USE "L"
IMOVEP11 MOVE.B D0,(A5)+ LENGTH
SPC 1
MOVE.B (A4),D4
LSR.B #1,D4
SPC 1
BTST.B #7,1(A4)
BEQ.S IMOVEP35
SPC 1
BSR FORMREGD D@,$HHHH(A@)
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
BSR.S IMOVEP66
CS20 BRA COMMON4
SPC 1
IMOVEP35 BSR.S IMOVEP66 $HHHH(A@),D@
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.B (A4),D4
LSR.B #1,D4
BSR FORMREGD
BRA CS20 COMMON4
SPC 1
IMOVEP66 MOVE.B #'$',(A6)+ FORMAT DISPLACEMENT
MOVE.W 2(A4),D0
BSR PNT4HX
SPC 1
MOVE.B #'(',(A6)+
MOVE.W (A4),D4
BSR FORMREGA
MOVE.B #')',(A6)+
RTS
PAGE
LONG
SCOMMON BRA COMMON NOP RESET RTE RTR RTS TRAPV
SPC 1
LONG
SCC BSR ICCCC GET REST OF OP-CODE
BSR EA DATA ALTERABLE
BRA SCOMMON
LONG
IDBCC DS 0 DB--
MOVE.W (A4),D4
BSR FORMREGD
MOVE.B D5,(A6)+ COMMA SEPARATOR
MOVE.B #'$',(A6)+ HEX FIELD TO FOLLOW
BSR ICCCC
BRA.S ICC55
SPC 1
* BIT 5432109876543210
* 0110............ FIXED
* ....CCCC........ CONDITION
* ........DDDDDDD0 DISPLACEMENT
* ...............1 ERROR (ODD BOUNDRY DISPLACEMENT)
*
LONG
ICC DS 0 B--
BSR ICCCC
SPC 1
IBSR MOVE.B #'$',(A6)+ BSR BRA
SPC 1
TST.B D4
BEQ.S ICC55 16 BIT DISPLACEMENT
SPC 1
MOVE.B #'.',(A5)+
MOVE.B #'S',(A5)+
EXT.W D4 8 BIT DISPLACEMENT
SPC 1
ICC35 EXT.L D4 SIGN-EXTENDED DISPLACEMENT
ADD.L HISPC(A1),D4 + PROGRAM COUNTER
ADD.L #2,D4 + TWO
MOVE.L D4,D0
ASR.L #1,D4
BCS FERROR ODD BOUNDRY DISPLACEMENT
BSR PNT6HX
BRA SCOMMON
SPC 1
ICC55 ADD.L #2,D3 SIZE
MOVE.W 2(A4),D4
MOVE.B #'.',(A5)+
MOVE.B #'L',(A5)+ .L FOR 16 BIT DISPLACEMENT
BRA ICC35
PAGE
LONG
* BCHG BCLR BSET BTST
ISETD DS 0 DYNAMIC BIT
ROL.W #7,D4
BSR FORMREGD DATA REGISTER
SPC 1
ISETD12 MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
BSR EA DATA ALTERABLE
CS18 BRA SCOMMON
SPC 3
LONG
* BCHG BCLR BSET BTST
* 1ST WORD .... .... ..XX XXXX EA DATA ALTERABLE ONLY
* 2ND WORD 0000 0000 000Y YYYY BIT NUMBER
*
ISETS DS 0 STATIC BIT
ADD.L #2,D3 SIZE
MOVE.B #'#',(A6)+ IMMEDIATE
CLR.L D0
MOVE.W 2(A4),D0 GET BIT POSITION FROM 2ND WORD
MOVE.L D0,D1
LSR.L #5,D1
BNE FERROR
BSR HEX2DEC DECIMAL
SPC 1
BRA ISETD12
PAGE
* BIT 5432109876543210
* ....XXX......... IMMEDIATE COUNT/REGISTER
* .......0........ RIGHT SHIFT
* .......1........ LEFT SHIFT
* ........00...... BYTE
* ........01...... WORD
* ........10...... LONG
* ....0...11...... WORD (MEMORY)
* ....0...11AAAAAA EFFECTIVE ADDRESS
* ..........0..... SHIFT IMMEDIATE COUNT
* ..........1..... SHIFT COUNT (MODULO 64) IN DATA REGISTER
*
LONG
ISHIFT DS 0 AS- LS- RO- ROX-
MOVE.W #'LR',D0
BTST #8,D4 DIRECTION BIT
BEQ.S ISHIFT13 RIGHT
LSR.W #8,D0 LEFT
ISHIFT13 MOVE.B D0,(A5)+ DIRECTION; "L" OR "R"
SPC 1
MOVE.W (A4),D0
AND.W #$00C0,D0
CMP.W #$00C0,D0
BEQ.S ISHIFTM1 MEMORY SHIFT
SPC 1
BSR FORMSIZE
SPC 1
ROL.W #7,D4
BTST #12,D4 I/R BIT
BNE.S ISHIFT33 COUNT IN REGISTER
SPC 1
AND.B #$07,D4 IMMEDIATE COUNT
BNE.S ISHIFT23
OR.B #$08,D4 CHANGE ZERO TO EIGHT
ISHIFT23 OR.B #'0',D4
MOVE.B #'#',(A6)+
MOVE.B D4,(A6)+
BRA.S ISHIFT44
SPC 1
ISHIFT33 BSR FORMREGD
SPC 1
ISHIFT44 MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
BSR FORMREGD
CS17 BRA CS18 COMMON
SPC 1
ISHIFTM1 MOVE.B #'.',(A5)+ PERIOD
MOVE.B #'W',(A5)+ .WORD
BTST #11,D4
BNE FERROR BIT 11 MUST BE ZERO
SPC 1
MOVE.W #$1FC,D7 MEMORY ALTERABLE ADDRESSING
BSR EA
BRA CS17 COMMON
PAGE
ICCCC MOVE.L #$0F,D0 APPEND CONDITION CODE 1,4
AND.B (A4),D0 D0 = CCC 1,4
LSL.L #1,D0 D0 = CCC*2
SPC 1
MOVE.W BRTBL(PC,D0.W),D1 GET BRANCH MNEMONIC
MOVE.B D1,(A5)+ (REVERSED) FROM THE TABLE
LSR.W #8,D1 AND ADD THE NONBLANK PORTION
CMP.B #' ',D1 TO THE BUFFER.
BEQ.S ICCCC9
MOVE.B D1,(A5)+
ICCCC9 RTS
SPC 2
BRTBL DC.B ' T' 'T ' BRA ACCEPTED
DC.B ' F' 'F '
DC.B 'IH' 'HI'
DC.B 'SL' 'LS'
DC.B 'CC' 'CC'
DC.B 'SC' 'CS'
DC.B 'EN' 'NE'
DC.B 'QE' 'EQ'
DC.B 'CV' 'VC'
DC.B 'SV' 'VS'
DC.B 'LP' 'PL'
DC.B 'IM' 'MI'
DC.B 'EG' 'GE'
DC.B 'TL' 'LT'
DC.B 'TG' 'GT'
DC.B 'EL' 'LE'
PAGE
* BIT 5432109876543210
* ....RRRMMM...... DESTINATION REGISTER MODE
* ..........MMMRRR SOURCE MODE REGISTER
*
* IF BYTE SIZE; ADDRESS DIRECT NOT ALLOWED AS SOURCE
*
IMOVEA1 DS 0
MOVE.W #$FFF,D7 ALL MODES
BSR EA
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4 ....RRRMMM......
LSR.W #1,D4 .....RRRMMM.....
LSR.B #5,D4 .....RRR.....MMM
ROR.W #8,D4 .....MMM.....RRR
LSL.B #5,D4 .....MMMRRR.....
LSR.W #5,D4 ..........MMMRRR
SPC 1
* IF .BYTE DESTINATION A@ NOT ALLOWED
MOVE.W #$1FF,D7 DATA ALTERABLE + A@
MOVE.B (A4),D0
CMP.B #$01,D0
BNE.S IMOVE19 NOT BYTE SIZE
MOVE.W #$1FD,D7 DATA ALTERABLE
IMOVE19
BSR EA
BRA.S CS19 COMMON
PAGE
* IF BYTE; ADDRESS REGISTER DIRECT NOT ALLOWED
IQUICKA DS 0 ADDQ SUBQ
BSR.S FORMSIZE
SPC 1
MOVE.B #'#',(A6)+
ROL.W #7,D4
AND.B #7,D4
BNE.S IQUICK21
OR.B #8,D4 MAKE ZERO INTO EIGHT
IQUICK21 OR.B #'0',D4 MAKE ASCII
MOVE.B D4,(A6)+
SPC 1
MOVE.B D5,(A6)+ COMMA SEPARATOR
SPC 1
MOVE.W (A4),D4
MOVE.W (A4),D0
AND.W #$00C0,D0
BEQ.S IQUICK31 DATA ALTERABLE
MOVE.W #$1FF,D7 ALTERABLE ADDRESSING
IQUICK31 BSR EA
CS19 BRA COMMON
PAGE
* BIT 5432109876543210
* ........00...... BYTE
* ........01...... WORD
* ........10...... LONG
* ........11...... ERROR
*
FORMSIZE DS 0
MOVE.W (A4),D2
MOVE.B #'.',(A5)+ STORE PERIOD
LSR.W #6,D2
AND.W #$03,D2
BNE.S FORM91
MOVE.B #'B',(A5)+ STORE "B"
BRA.S FORM95
SPC 1
FORM91 MOVE.B #'W',D0
CMP.B #1,D2
BEQ.S FORM93
MOVE.B #'L',D0
CMP.B #2,D2
BNE.S FE10 FERROR
FORM93 MOVE.B D0,(A5)+ STORE "W" OR "L"
FORM95 RTS
PAGE
EA000 BSR FORMREGD
BTST #0,D7
BEQ.S FE10 FERROR
RTS
SPC 2
EA001 BSR FORMREGA
BTST #1,D7
BEQ.S FE10 FERROR THIS MODE NOT ALLOWED
RTS
SPC 2
EA010 MOVE.B #'(',(A6)+
BSR FORMREGA
MOVE.B #')',(A6)+
BTST #2,D7
BEQ.S FE10 FERROR THIS MODE NOT ALLOWED
RTS
SPC 2
EA011 MOVE.B #'(',(A6)+
BSR FORMREGA
MOVE.B #')',(A6)+
MOVE.B #'+',(A6)+
BTST #3,D7
BEQ.S FE10 FERROR THIS MODE NOT ALLOWED
EA011RTS RTS
SPC 2
EA100 MOVE.B #'-',(A6)+
MOVE.B #'(',(A6)+
BSR FORMREGA
MOVE.B #')',(A6)+
BTST #4,D7
BNE EA011RTS
FE10 BRA FERROR THIS MODE NOT ALLOWED
PAGE
* ENTER A4 = POINTER TO FIRST WORD
* D3 = OFFSET TO EXTENSION
* D4 = VALUE TO PROCESS
* D7 = MODES ALLOWED MASK
*
EA DS 0
MOVE.L D4,D0
LSR.W #3,D0
AND.W #$7,D0
BEQ EA000
SPC 1
CMP.B #1,D0
BEQ EA001
SPC 1
CMP.B #2,D0
BEQ EA010
SPC 1
CMP.B #3,D0
BEQ EA011
SPC 1
CMP.B #4,D0
BEQ EA100
SPC 1
CMP.B #5,D0
BEQ.S EA101
SPC 1
CMP.B #7,D0
BEQ.S EA111
PAGE
* EXTENSION WORD
* BIT 5432109876543210
* 0............... DATA REGISTER
* 1............... ADDRESS REGISTER
* .RRR............ REGISTER
* ....0........... SIGN EXTENDED, LOW ORDER INTEGER IN INDEX REG
* ....1........... LONG VALUE IN INDEX REGISTER
* .....000........
* ........DDDDDDDD DISPLACEMENT INTEGER
*
* EA110 ADDRESS REGISTER INDIRECT WITH INDEX
SPC 1
BTST #6,D7
BEQ FE10 FERROR THIS MODE NOT ALLOWED
MOVE.W (A4,D3),D1
AND.W #$0700,D1
BNE FE10 FERROR BITS 10-8 MUST BE ZERO
MOVE.W (A4,D3),D0 D0 = DISPLACEMENT
EXT.W D0
EXT.L D0
BSR HEX2DEC DECIMAL
MOVE.B #'(',(A6)+ (
SPC 1
BSR FORMREGA XX(A@
SPC 1
MOVE.B #',',(A6)+ XX(A@,
SPC 1
MOVE.B (A4,D3),D4
ASR.B #4,D4
BPL.S EA1105
BSR FORMREGA
BRA.S EA1107
SPC 1
EA1105 BSR FORMREGD
EA1107 MOVE.B #'.',(A6)+ XX(A@,X@.
SPC 1
MOVE.W (A4,D3),D4 D4 = R@
MOVE.B #'W',D0 ..........W
BTST #11,D4
BEQ.S EA1109
MOVE.B #'L',D0 ..........L
EA1109 MOVE.B D0,(A6)+
MOVE.B #')',(A6)+ ...........)
ADD.L #2,D3
RTS
PAGE
* ADDRESS REGISTER INDIRECT WITH DISPLACEMENT
*
EA101 BTST #5,D7 101000; DIS(A@)
BEQ.S FE11 FERROR; THIS MODE NOT ALLOWED
MOVE.W (A4,D3),D0
EXT.L D0
BSR HEX2DEC DECIMAL
ADD.L #2,D3 SIZE
BRA EA010
PAGE
* 111000 ABSOLUTE SHORT
* 111001 ABSOLUTE LONG
* 111010 PROGRAM COUNTER WITH DISPLACEMENT
* 111011 PROGRAM COUNTER WITH INDEX
* 111100 IMMEDIATE OR STATUS REG
*
EA111
AND.W #7,D4
BNE.S EA1112
SPC 1
BTST #7,D7
BEQ.S FE11 FERROR; THIS MODE NOT ALLOWED
MOVE.W (A4,D3),D0 111000; ABSOLUTE SHORT
EXT.L D0
MOVE.B #'$',(A6)+
BSR PNT8HX SIGN EXTENDED VALUE 1,3
ADD.L #2,D3 SIZE + 2
RTS
SPC 1
EA1112 CMP.B #1,D4
BNE.S EA1113
SPC 1
BTST #8,D7
BEQ.S FE11 FERROR; THIS MODE NOT ALLOWED
MOVE.B #'$',(A6)+ HEX
MOVE.L (A4,D3),D0 111001; ABSOLUTE LONG
BSR PNT8HX
*- MOVE.B #'.',(A6)+ FORCE LONG FORMAT 1,3
*- MOVE.B #'L',(A6)+ IE .L 1,3
ADD.L #4,D3
RTS
SPC 1
EA1113 CMP.B #2,D4
BNE.S EA1114
SPC 1
BTST #9,D7
BNE.S EA1113A
FE11 BRA FERROR THIS MODE NOT ALLOWED
EA1113A
MOVE.W (A4,D3),D0 111010; PC + DISPLACEMENT DESTINATION(PC)
EXT.L D0
ADD.L HISPC(A1),D0
ADD.L #2,D0
MOVE.B #'$',(A6)+ HEX "$" 1,3
BSR PNT8HX DESTINATION
MOVE.L #')CP(',D0 (PC)
BSR SCHR STORE WORD
ADD.L #2,D3 SIZE
RTS
SPC 1
EA1114 CMP.B #3,D4
BNE.S EA1115
PAGE
* PROGRAM COUNTER WITH INDEX DESTINATION(PC,R@.X)
*
* 5432109876543210 SECOND WORD
* 0............... DATA REGISTER
* 1............... ADDRESS REGISTER
* .XXX............ REGISTER
* ....0........... SIGN-EXTENDED, LOW ORDER WORD INTEGER
* ..IN INDEX REGISTER
* ....1........... LONG VALUE IN INDEX REGISTER
* .....000........
* ........XXXXXXXX DISPLACEMENT INTEGER
*
BTST #10,D7
BEQ FE11 FERROR THIS MODE NOT ASLLOWED
MOVE.W (A4,D3),D1
AND.W #$0700,D1
BNE FE11 FERROR; BITS 10-8 MUST BE ZERO
MOVE.B 1(A4,D3),D0 111100; DESTINATION(PC,R@.X)
EXT.W D0
EXT.L D0
ADD.L HISPC(A1),D0
ADD.L #2,D0
MOVE.B #'$',(A6)+ HEX "$" 1,3
BSR PNT8HX DESTINATION 1,3
SPC 1
MOVE.L #',CP(',D0
BSR SCHR DES(PC,
SPC 1
MOVE.W (A4,D3),D4
ROL.W #4,D4
BTST #3,D4
BEQ.S EAF25
BSR FORMREGA
BRA.S EAF27
EAF25 BSR FORMREGD DES(PC,R@
EAF27
SPC 1
MOVE.B #'.',(A6)+ DES(PC,R@.
SPC 1
MOVE.W (A4,D3),D4
MOVE.W #'LW',D0
BTST #11,D4
BEQ.S EAF35
LSR.W #8,D0
EAF35 MOVE.B D0,(A6)+ DES(PC,R@.X
SPC 1
MOVE.B #')',(A6)+ DES(PC,R@.X)
ADD.L #2,D3
RTS
PAGE
* BIT 5432109876543210
* ..........111100 FIRST WORD; #<IMMEDIATE>
*
EA1115 CMP.B #4,D4
BNE FE11 FERROR
SPC 1
BTST #11,D7
BEQ FE11 FERROR; THIS MODE NOT ALLOWED
MOVE.B #'#',(A6)+ IMMEDIATE
SPC 1
MOVE.B -1(A5),D1
CMP.B #'L',D1
BEQ.S EA11155 LONG
SPC 1
MOVE.W (A4,D3),D0
CMP.B #'B',D1
BNE.S EA11153 .WORD
* BYTE SIZE; DATA ALLOWED
* 0000 0000 XXXX XXXX
* 1111 1111 1XXX XXXX
MOVE.L D0,D1
LSR.W #8,D1
BEQ.S EA11153
MOVE.L D0,D1
ASR.W #7,D1
ADD.W #1,D1
BNE FE11 FERROR
EA11153 EXT.L D0
BSR HEX2DEC
ADD.L #2,D3
RTS
SPC 1
EA11155 MOVE.L (A4,D3),D0
BSR HEX2DEC
ADD.L #4,D3 SIZE
RTS
PAGE
MOVEMS MOVE.B #'.',(A5)+ PERIOD
MOVE.W #'LW',D0
BTST #6,D4
BEQ.S MOVEMS2
LSR.W #8,D0
MOVEMS2 MOVE.B D0,(A5)+ SIZE
RTS
SPC 1
* MOVEM - REGISTER EXPANSION
*
MOVEMR DS 0
MOVE.W 2(A4),D2 D2 = SECOND WORD
MOVE.L #' '>>8,D0 D0 = SPACE
MOVE.L #'/'>>8,D7 D7 = /
SUB.L #1,A6 ADJUST STORE POINTER
MOVE.L #'0'>>8,D5 D5 = REGISTER #
MOVE.W #'AD',D4 D4 = REG CLASS
SPC 1
MOVEMR11 BTST D1,D2
BEQ.S MOVEMR77 BIT RESET
SPC 1
CMP.B (A6),D0 BIT SET
BNE.S MOVEMR44 NOT SPACE
SPC 1
MOVEMR33 MOVE.B D4,1(A6) REG TYPE
MOVE.B D5,2(A6) REG #
MOVE.B #'-',3(A6) -
ADD.L #3,A6
BRA.S MOVEMR88
SPC 1
MOVEMR44 CMP.B #',',(A6)
BEQ MOVEMR33 COMMA SEPARATOR
SPC 1
CMP.B (A6),D7 / SEPARATOR
BEQ MOVEMR33
SPC 1
MOVE.B D4,1(A6) REG TYPE
MOVE.B D5,2(A6) REG #
MOVE.B #'-',3(A6) - SEPARATOR
BRA.S MOVEMR88
SPC 1
MOVEMR77 CMP.B #',',(A6)
BEQ.S MOVEMR88 COMMA
SPC 1
CMP.B (A6),D0
BEQ.S MOVEMR88 SPACE
CMP.B 1(A6),D0
BEQ.S MOVEMR79 SPACE
ADD.L #3,A6
MOVEMR79 MOVE.B D7,(A6) / SEPARATOR
SPC 1
MOVEMR88 ADD.L #1,D5
ADD.L D6,D1 D1 = BIT POSITION
CMP.B #'8',D5
BNE MOVEMR11
SPC 1
CMP.B (A6),D0 SPACE
BEQ.S MOVEMR94
SPC 1
CMP.B 1(A6),D0 SPACE
BEQ.S MOVEMR94
ADD.L #3,A6
MOVE.B D7,(A6) / SEPARATOR
SPC 1
MOVEMR94 MOVE.B #'0',D5 RESET REG TO ZERO
LSR.W #8,D4 CHANGE REG TYPE
BNE MOVEMR11 MORE
SPC 1
MOVE.B D0,(A6) SPACE
RTS
PAGE
DCODE68K DS 0
LINK A1,#-LOCVARSZ CREATE A FRAME FOR THE
MOVEM.L D0-D2/A4,DATA(A1) CODE AND ITS PC. A4
LEA DATA(A1),A4 POINTS TO THE CODE.
MOVE.L A5,A3 A3 = START OF OUTPUT BUFFER
MOVE.L #BUFSIZE,D0
MOVE.L A3,A6
DEC311 MOVE.B #' ',(A6)+ SPACE FILL BUFFER
SUB.L #1,D0
BNE DEC311
SPC 1
MOVE.L A3,A6 FORMAT ADDRESS
MOVE.L HISPC(A1),D0
BSR FRELADDR
SPC 1
* CHECK FOR KNOWN ILLEGAL CODES
MOVE.W (A4),D0
LEA KI(PC),A5
MOVE.L A5,A6
ADD.L #KIEND-KI,A6
DEC404 CMP.W (A5)+,D0
BEQ.S FE12 FERROR; ILLEGAL CODE 1,4
CMP.L A6,A5
BNE DEC404
SPC 1
* LOOK FOR MATCH OF OP-CODE
*
LEA TBL(PC),A5 A5 = POINTER TO DECODE TABLE
LEA TBLE(PC),A6 A6 = POINTER TO END OF TABLE
DEC411 MOVE.W (A4),D0 FIRST WORD
AND.W (A5)+,D0 MASK
CMP.W (A5)+,D0
BEQ.S DEC425 FOUND MATCH
ADD.L #2,A5 UPDATE POINTER
CMP.L A6,A5
BNE DEC411 MORE TABLE
FE12 BRA.S FERROR ILLEGAL INSTRUCTION 1,4
SPC 1
DEC425 CLR.L D6
MOVE.B (A5)+,D6 D6 = (GOTO OFFSET)/4
LSL.L #2,D6
SPC 1
CLR.L D7
MOVE.B (A5)+,D7 D7 = INDEX TO OP-CODE
SPC 1
* MOVE OP-CODE TO BUFFER
*
LEA OPCTBL(PC),A0
DEC510 TST D7
BEQ.S DEC530 AT INDEX
DEC515 TST.B (A0)+
BPL DEC515 MOVE THROUGH FIELD
SUB.L #1,D7
BRA DEC510
SPC 1
DEC530 MOVE.L #FOC,D0 . 1,4
LEA.L (A3,D0),A5 A5 = STORE POINTER OP-CODE 1,4
DEC535 MOVE.B (A0)+,D0
BCLR #7,D0
BNE.S DEC537 END OF MOVE
MOVE.B D0,(A5)+
BRA DEC535
DEC537 MOVE.B D0,(A5)+
SPC 1
* CALCULATE GOTO AND GO
*
MOVE.L #2,D3 D3= SIZE
LEA X(PC),A0
ADD.L D6,A0
SPC 1
MOVE.L #FOP,D0 . 1,4
LEA.L (A3,D0),A6 A6 = POINTER FOR OPERAND 1,4
SPC 1
MOVE.W (A4),D4 D4 = FIRST WORD
MOVE.B #',',D5 D5 = CONTAINS ASCII COMMA
SPC 1
MOVE.W #$1FD,D7 D7 = DATA ALTERABLE MODES ALLOWED
JMP (A0)
*
* A4 = POINTER TO DATA IN FRAME CREATED BY 'LINK A1,...'
* A5 = POINTER STORE OP-CODE
* A6 = POINTER STORE OPERAND
* D3 = SIZE = 2 BYTES
* D4 = FIRST WORD
* D7 = ADDRESS MODES ALLOWED ($1FD) DATA ALTERABLE
PAGE
COMMON4 ADD.L #2,D3 SIZE = 4
SPC 1
COMMON MOVE.L D3,D6 D6 = SIZE
MOVE.B #' ',(A6)+ SPACE AS LAST CHAR
SPC 1
MOVE.L A6,A5 SAVE END OF BUFFER POINTER
MOVE.L #FDATA,D0 . 1,4
LEA.L (A3,D0),A6 . 1,4
COMMON35 MOVE.W (A4)+,D0 GET NEXT WORD OF DATA.
ADD.L #2,HISPC(A1) ADJUST PROG COUNTER.
BSR PNT4HX FORMAT DATA. (A6)+
SUB.B #2,D3
BNE COMMON35
MOVE.L A5,A6 A6 = RESTORE END POINTER
SPC 1
MOVE.L A3,A5 A5 = BEGINNING OF BUFFER
SPC 1
MOVE.L HISPC(A1),A4 MOVE THE UPDATED PC
UNLK A1 TO A4 AND UNDO FRAME.
RTS
SPC 3
FERROR DS 0
* ILLEGAL INSTRUCTION
*
MOVE.L #FOC,D0 . 1,4
LEA.L (A3,D0),A6 . 1,4
LEA MSG111(PC),A5
FERROR35 MOVE.B (A5)+,D0
CMP.B #EOT,D0
BEQ.S FERROR39
MOVE.B D0,(A6)+
BRA FERROR35
FERROR39 DS 0
SPC 1
MOVE.W (A4),D0
BSR PNT4HX
SPC 1
MOVE.L #2,D3 SIZE
SPC 1
BRA COMMON
SPC 1
MSG111 DC.B 'DC.W $',EOT
PAGE
SPC 1
KI DC.W $4AFB KNOWN ILLEGAL CODES
KIEND DS 0
PAGE
* \1 MASK
* \2 OP-CODE PATTERN
* \3 GOTO OFFSET
* \4 INDEX TO OP-CODE
C68 MACRO
DC.W $\1
DC.W $\2
DC.B (\3-X)>>2
DC.B \4
ENDM
SPC 1
TBL DS 0
C68 FEC0,E6C0,ISHIFT,56 RO
C68 FEC0,E4C0,ISHIFT,57 ROX
C68 FEC0,E2C0,ISHIFT,55 LS
C68 FEC0,E0C0,ISHIFT,54 AS
C68 F018,E018,ISHIFT,56 RO
C68 F018,E010,ISHIFT,57 ROX
C68 F018,E008,ISHIFT,55 LS
C68 F018,E000,ISHIFT,54 AS
C68 F0C0,D0C0,FORM10EX,4 ADD <EA>,A@
C68 F130,D100,FORM12,53 ADDX
C68 F000,D000,FORM10EX,4 ADD
C68 F1F8,C188,FORM9,50 EXG
C68 F1F8,C148,FORM8,50 EXG
C68 F1F8,C140,FORM7,50 EXG
C68 F1F0,C100,FORM12,49 ABCD
C68 F1C0,C1C0,FORM6D,48 MULS
C68 F1C0,C0C0,FORM6D,47 MULU
C68 F000,C000,FORM10,2 AND
C68 F0C0,B0C0,FORM10EX,6 CMP <EA>,A@
C68 F138,B108,FORM12A,46 CMPM
C68 F100,B100,FORM10,5 EOR
C68 F000,B000,FORM10EX,6 CMP
C68 F0C0,90C0,FORM10EX,44 SUB <EA>,A@
C68 F130,9100,FORM12,45 SUBX
C68 F000,9000,FORM10EX,44 SUB
C68 F1F0,8100,FORM12,43 SBCD
C68 F1C0,81C0,FORM6D,42 DIVS
C68 F1C0,80C0,FORM6D,41 DIVU
C68 F000,8000,FORM10,40 OR
C68 F100,7000,IMOVEQ,39 MOVEQ
C68 FF00,6100,IBSR,51 BSR
C68 FF00,6000,IBSR,65 BRA 1,3
C68 F000,6000,ICC,38 B
C68 F0F8,50C8,IDBCC,37 DB
C68 F0C0,50C0,SCC,36 S
C68 F100,5100,IQUICK,35 SUBQ
C68 F100,5000,IQUICK,34 ADDQ
C68 F1C0,41C0,FORM6A,33 LEA
C68 F1C0,4180,FORM6D,32 CHK
C68 FFC0,4EC0,FORM11SL,31 JMP 1,4
C68 FFC0,4E80,FORM11SL,30 JSR 1,4
C68 FFFF,4E77,SCOMMON,29 RTR
C68 FFFF,4E76,SCOMMON,28 TRAPV
C68 FFFF,4E75,SCOMMON,27 RTS
C68 FFFF,4E73,SCOMMON,26 RTE
C68 FFFF,4E72,ISTOP,25 STOP
C68 FFFF,4E71,SCOMMON,24 NOP
C68 FFFF,4E70,SCOMMON,23 RESET
C68 FFF8,4E68,IMVFUSP,60 MOVE FROM USP
C68 FFF8,4E60,IMVTUSP,60 MOVE TO USP
C68 FFF8,4E58,FORM5,22 UNLINK
C68 FFF8,4E50,ILINK,21 LINK
C68 FFF0,4E40,FORM4,20 TRAP
C68 FF80,4C80,IMOVEMTR,15 MOVEM FROM REGISTERS
C68 FFC0,4AC0,FORM1A,19 TAS
C68 FF00,4A00,FORM1,18 TST
C68 FFF8,48C0,FORM3,17 EXT.L
C68 FFF8,4880,FORM3,16 EXT.W
C68 FF80,4880,IMOVEMFR,15 MOVEA TO REGISTERS
C68 FFF8,4840,FORM3,14 SWAP
C68 FFC0,4840,FORM11,13 PEA
C68 FFC0,4800,FORM1A,12 NBCD
C68 FFC0,46C0,IMVTSR,59 MOVE TO SR
C68 FF00,4600,FORM1,11 NOT
C68 FFC0,44C0,IMVTCCR,59 MOVE TO CCR
C68 FF00,4400,FORM1,10 NEG
C68 FF00,4200,FORM1,9 CLR
C68 FFC0,40C0,IMVFSR,59 MOVE.W FROM SR
C68 FF00,4000,FORM1,8 NEGX
C68 F000,3000,IMOVE,59 MOVE.W
C68 F000,2000,IMOVE,60 MOVE.L
C68 F000,1000,IMOVE,58 MOVE.B
C68 FF00,0C00,IMMED,6 CMP #
C68 FF00,0A00,IMMED,5 EOR #
C68 FF00,0600,IMMED,4 ADD #
C68 FF00,0400,IMMED,3 SUB #
C68 FF00,0200,IMMED,2 AND #
C68 FF00,0000,IMMED,1 OR #
C68 F138,0108,IMOVEP,0 MOVEP
C68 FFC0,08C0,ISETS,64 BSET
C68 FFC0,0880,ISETS,63 BCLR
C68 FFC0,0840,ISETS,62 BCHG
C68 FFC0,0800,ISETS,61 BTST
C68 F1C0,01C0,ISETD,64 BSET
C68 F1C0,0180,ISETD,63 BCLR
C68 F1C0,0140,ISETD,62 BCHG
C68 F1C0,0100,ISETD,61 BTST
TBLE DS 0
PAGE
N68 MACRO
DC.B '\1',128+'\2' \1\2
ENDM
OPCTBL DS 0
N68 MOVE,P 0
N68 O,R 1
N68 AN,D 2
N68 SU,B 3
N68 AD,D 4
N68 EO,R 5
N68 CM,P 6
N68 MOV,E 7
N68 NEG,X 8
N68 CL,R 9
N68 NE,G 10
N68 NO,T 11
N68 NBC,D 12
N68 PEA.,L 13
N68 SWAP.,W 14
N68 MOVE,M 15
N68 EXT.,W 16
N68 EXT.,L 17
N68 TS,T 18
N68 TAS.,B 19
N68 TRA,P 20
N68 LIN,K 21
N68 UNL,K 22
N68 RESE,T 23
N68 NO,P 24
N68 STO,P 25
N68 RT,E 26
N68 RT,S 27
N68 TRAP,V 28
N68 RT,R 29
N68 JS,R 30
N68 JM,P 31
N68 CHK.,W 32
N68 LEA.,L 33
N68 ADD,Q 34
N68 SUB,Q 35
DC.B 128+'S' 36
N68 D,B 37
DC.B 128+'B' 38
N68 MOVEQ.,L .....39
N68 O,R 40
N68 DIVU.,W 41
N68 DIVS.,W 42
N68 SBC,D 43
N68 SU,B 44
N68 SUB,X 45
N68 CMP,M 46
N68 MULU.,W 47
N68 MULS.,W 48
N68 ABC,D 49
N68 EX,G 50
N68 BS,R .....51
N68 NUL,L .....52
N68 ADD,X 53
N68 A,S 54
N68 L,S 55
N68 R,O 56
N68 RO,X 57
N68 MOVE.,B 58
N68 MOVE.,W 59
N68 MOVE.,L 60
N68 BTS,T 61
N68 BCH,G 62
N68 BCL,R 63
N68 BSE,T 64
N68 BR,A 65 1,3
END